﻿using System;

namespace Jumbot.API.Discuz
{
    public interface IDbProvider
    {
        /// <summary>
        /// 异常错误信息
        /// </summary>
        string vErrorResultString
        {
            get ;
        }

        /// <summary>
        /// 数据库连接语句
        /// </summary>
        string vDataBaseConnectionString
        {
            set ;
            get ;
        }

        /// <summary>
        /// 执行Command参数并返回内存中数据的一个表
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个X行2列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <returns>System.Data.DataTable</returns>
        System.Data.DataTable vDataTable(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure);
        

        /// <summary>
        /// 执行Command参数并返回内存中数据的一个表
        /// </summary>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <returns>System.Data.DataTable</returns>
        System.Data.DataTable vDataTable(string _vCommandText);

        /// <summary>
        /// 执行Command参数并返回数据在内存中的缓存
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个X行2列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <returns>System.Data.DataSet</returns>
        System.Data.DataSet vDataSet(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure);

        /// <summary>
        /// 执行Command参数并返回数据在内存中的缓存
        /// </summary>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <returns>System.Data.DataSet</returns>
        System.Data.DataSet vDataSet(string _vCommandText);

        /// <summary>
        /// 执行Command参数并返回结果集中的第一行第一列。忽略其他行或列。
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个X行2列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <returns>Command.ExecuteScalar()</returns>
        object vExecuteScalar(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure);

        /// <summary>
        /// 执行Command参数并返回结果集中的第一行第一列。忽略其他行或列。
        /// </summary>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <returns>Command.ExecuteScalar()</returns>
        object vExecuteScalar(string _vCommandText);


        /// <summary>
        /// 执行Command参数并返回受影响的行数
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个X行2列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <returns>受影响的行数</returns>
        int vExecuteNonQuery(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure);

        /// <summary>
        /// 执行Command参数并返回受影响的行数
        /// </summary>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <returns>受影响的行数</returns>
        int vExecuteNonQuery(string _vCommandText);


        /// <summary>
        /// 执行Command参数并返回受影响的行数
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个X行2列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <param name="id">返回最后的id</param>
        /// <returns>受影响的行数</returns>
        int vExecuteNonQuery(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure, out int id);

        /// <summary>
        /// 执行Command参数并返回受影响的行数
        /// </summary>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="id">返回最后的id</param>
        /// <returns>受影响的行数</returns>
        int vExecuteNonQuery(string _vCommandText, out int id);

        /// <summary>
        /// Command
        /// </summary>
        /// <param name="_vParameters">Command的Parameters值，用一个2行X列的二维数组表示。[0, X]为Parameter名，[1, X]为Parameter的值</param>
        /// <param name="_vCommandText">要执行的Sql语句</param>
        /// <param name="_vStoredProcedure">是否为存储过程</param>
        /// <returns>Command</returns>
        object vCommand(object[,] _vParameters, string _vCommandText, bool _vStoredProcedure);
    }
}
